/**
 * 搭子服务API
 * 提供搭子相关的分类、帖子、报名、收藏等管理和查询接口
 * @author WeChat Mini Program Team
 * @since 2025-08-13
 */

const Request = require('./request');

class BuddyService {
  constructor() {
    this.service = 'buddy';
  }

  // ==================== 搭子分类管理 ====================

  /**
   * 获取搭子分类列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 分类列表
   */
  async getCategoryList(params = {}) {
    return Request.get('/buddy/categories', params, {
      service: this.service
    });
  }

  /**
   * 获取分类详情
   * @param {number} categoryId 分类ID
   * @returns {Promise<Object>} 分类详情
   */
  async getCategoryDetail(categoryId) {
    return Request.get(`/buddy/categories/${categoryId}`, {}, {
      service: this.service
    });
  }

  /**
   * 新增搭子分类
   * @param {Object} categoryData 分类数据
   * @param {string} categoryData.name 分类名称
   * @param {string} categoryData.icon 分类图标
   * @param {string} categoryData.description 分类描述
   * @param {number} categoryData.sort 排序
   * @returns {Promise<Object>} 创建结果
   */
  async createCategory(categoryData) {
    return Request.post('/buddy/categories', categoryData, {
      service: this.service,
      showLoading: true,
      loadingText: '创建中...'
    });
  }

  /**
   * 更新搭子分类
   * @param {number} categoryId 分类ID
   * @param {Object} categoryData 分类数据
   * @returns {Promise<Object>} 更新结果
   */
  async updateCategory(categoryId, categoryData) {
    return Request.put(`/buddy/categories/${categoryId}`, categoryData, {
      service: this.service,
      showLoading: true,
      loadingText: '更新中...'
    });
  }

  /**
   * 删除搭子分类
   * @param {number} categoryId 分类ID
   * @returns {Promise<Object>} 删除结果
   */
  async deleteCategory(categoryId) {
    return Request.delete(`/buddy/categories/${categoryId}`, {
      service: this.service,
      showLoading: true,
      loadingText: '删除中...'
    });
  }

  // ==================== 搭子帖子管理 ====================

  /**
   * 获取帖子列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {number} params.category_id 分类ID筛选
   * @param {string} params.region 地区筛选
   * @param {string} params.keyword 关键字搜索
   * @param {string} params.status 状态筛选
   * @returns {Promise<Object>} 帖子列表
   */
  async getPostList(params = {}) {
    return Request.get('/buddy/posts', params, {
      service: this.service
    });
  }

  /**
   * 获取帖子详情
   * @param {number} postId 帖子ID
   * @returns {Promise<Object>} 帖子详情
   */
  async getPostDetail(postId) {
    return Request.get(`/buddy/posts/${postId}`, {}, {
      service: this.service
    });
  }

  /**
   * 新增搭子帖子
   * @param {Object} postData 帖子数据
   * @param {string} postData.title 标题
   * @param {string} postData.description 描述
   * @param {number} postData.category_id 分类ID
   * @param {string} postData.region 地区
   * @param {string} postData.activity_time 活动时间
   * @param {string} postData.activity_location 活动地点
   * @param {number} postData.max_participants 最大参与人数
   * @param {string} postData.contact_info 联系方式
   * @param {Array<string>} postData.images 图片数组
   * @param {Array<string>} postData.tags 标签数组
   * @returns {Promise<Object>} 创建结果
   */
  async createPost(postData) {
    return Request.post('/buddy/posts', postData, {
      service: this.service,
      showLoading: true,
      loadingText: '发布中...'
    });
  }

  /**
   * 更新搭子帖子
   * @param {number} postId 帖子ID
   * @param {Object} postData 帖子数据
   * @returns {Promise<Object>} 更新结果
   */
  async updatePost(postId, postData) {
    return Request.put(`/buddy/posts/${postId}`, postData, {
      service: this.service,
      showLoading: true,
      loadingText: '更新中...'
    });
  }

  /**
   * 删除搭子帖子
   * @param {number} postId 帖子ID
   * @returns {Promise<Object>} 删除结果
   */
  async deletePost(postId) {
    return Request.delete(`/buddy/posts/${postId}`, {
      service: this.service,
      showLoading: true,
      loadingText: '删除中...'
    });
  }

  /**
   * 获取我的搭子帖子列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.status 状态筛选
   * @param {number} params.user_id 用户ID（必需）
   * @returns {Promise<Object>} 我的帖子列表
   */
  async getMyPostList(params = {}) {
    return Request.get('/buddy/posts', params, {
      service: this.service
    });
  }

  /**
   * 获取热门搭子帖子
   * @param {Object} params 查询参数
   * @param {number} params.limit 数量限制
   * @returns {Promise<Object>} 热门帖子列表
   */
  async getHotPostList(params = {}) {
    return Request.get('/buddy/posts', { ...params, order: 'hot' }, {
      service: this.service
    });
  }

  /**
   * 搜索搭子帖子
   * @param {Object} params 搜索参数
   * @param {string} params.keyword 关键词
   * @param {number} params.category_id 分类ID
   * @param {string} params.region 地区
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @returns {Promise<Object>} 搜索结果
   */
  async searchPosts(params = {}) {
    return Request.get('/buddy/posts', params, {
      service: this.service
    });
  }

  // ==================== 搭子报名管理 ====================

  /**
   * 报名搭子活动
   * @param {Object} signupData 报名数据
   * @param {number} signupData.post_id 帖子ID
   * @param {number} signupData.user_id 用户ID
   * @param {string} signupData.message 报名留言
   * @param {string} signupData.contact_info 联系方式
   * @returns {Promise<Object>} 报名结果
   */
  async signupActivity(signupData) {
    return Request.post('/buddy/signups', signupData, {
      service: this.service,
      showLoading: true,
      loadingText: '报名中...'
    });
  }

  /**
   * 获取报名详情
   * @param {number} signupId 报名ID
   * @returns {Promise<Object>} 报名详情
   */
  async getSignupDetail(signupId) {
    return Request.get(`/buddy/signups/${signupId}`, {}, {
      service: this.service
    });
  }

  /**
   * 获取用户报名列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.status 状态筛选
   * @returns {Promise<Object>} 报名列表
   */
  async getMySignupList(params = {}) {
    return Request.get('/buddy/signups', params, {
      service: this.service
    });
  }

  /**
   * 获取帖子报名列表
   * @param {number} postId 帖子ID
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 帖子报名列表
   */
  async getPostSignupList(postId, params = {}) {
    return Request.get(`/buddy/posts/${postId}/signups`, params, {
      service: this.service
    });
  }

  /**
   * 取消报名
   * @param {number} signupId 报名ID
   * @returns {Promise<Object>} 取消结果
   */
  async cancelSignup(signupId) {
    return Request.put(`/buddy/signups/${signupId}`, { status: 'cancelled' }, {
      service: this.service,
      showLoading: true,
      loadingText: '取消中...'
    });
  }

  /**
   * 审核报名申请
   * @param {number} signupId 报名ID
   * @param {Object} reviewData 审核数据
   * @param {string} reviewData.status 审核状态（approved/rejected）
   * @param {string} reviewData.remark 审核备注
   * @returns {Promise<Object>} 审核结果
   */
  async reviewSignup(signupId, reviewData) {
    return Request.put(`/buddy/signups/${signupId}`, reviewData, {
      service: this.service,
      showLoading: true,
      loadingText: '审核中...'
    });
  }

  // ==================== 搭子收藏管理 ====================

  /**
   * 收藏/点赞搭子帖子
   * @param {Object} favoriteData 收藏数据
   * @param {number} favoriteData.post_id 帖子ID
   * @param {number} favoriteData.user_id 用户ID
   * @param {string} favoriteData.type 类型（favorite/like）
   * @returns {Promise<Object>} 收藏结果
   */
  async addFavorite(favoriteData) {
    return Request.post('/buddy/favorite', favoriteData, {
      service: this.service,
      showError: true
    });
  }

  /**
   * 取消收藏/点赞
   * @param {number} postId 帖子ID
   * @param {number} userId 用户ID
   * @param {string} type 类型（favorite/like）
   * @returns {Promise<Object>} 取消结果
   */
  async removeFavorite(postId, userId, type = 'favorite') {
    return Request.delete(`/buddy/favorite`, {
      service: this.service
    });
  }

  /**
   * 获取用户收藏列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {string} params.type 类型（favorite/like）
   * @returns {Promise<Object>} 收藏列表
   */
  async getFavoriteList(params = {}) {
    return Request.get('/buddy/favorite', params, {
      service: this.service
    });
  }

  /**
   * 检查是否已收藏/点赞
   * @param {number} postId 帖子ID
   * @param {number} userId 用户ID
   * @param {string} type 类型（favorite/like）
   * @returns {Promise<Object>} 检查结果
   */
  async checkFavorite(postId, userId, type = 'favorite') {
    return Request.get(`/buddy/favorite`, {}, {
      service: this.service
    });
  }

  // ==================== 搭子评论管理 ====================

  /**
   * 添加帖子评论
   * @param {Object} commentData 评论数据
   * @param {number} commentData.post_id 帖子ID
   * @param {number} commentData.user_id 用户ID
   * @param {string} commentData.content 评论内容
   * @param {number} commentData.parent_id 父评论ID（可选）
   * @returns {Promise<Object>} 评论结果
   */
  async addComment(commentData) {
    return Request.post(`/buddy/posts/${commentData.post_id}/comments`, commentData, {
      service: this.service,
      showLoading: true,
      loadingText: '评论中...'
    });
  }

  /**
   * 获取帖子评论列表
   * @param {number} postId 帖子ID
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @returns {Promise<Object>} 评论列表
   */
  async getCommentList(postId, params = {}) {
    return Request.get(`/buddy/posts/${postId}/comments`, params, {
      service: this.service
    });
  }

  // 注：评论的删除、点赞等功能暂未在API文档中定义，如需要可后续添加

  // 注：地区、统计等功能应使用region服务和具体的分析服务
  // 此处删除冗余的旧接口
}

module.exports = new BuddyService();
